package com.wyu.controller;


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wyu.pojo.Cart;

import com.wyu.pojo.CartItem;
import com.wyu.pojo.menu;
import com.wyu.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;


@Controller
@RequestMapping("/user123")
public class CartController {



    @Autowired
    @Qualifier("MenuServiceImpl")
    private MenuService menuService;


    //修改商品数量
    @RequestMapping("/cart")
    public String cart() {
        return "cart/cart";
    }

    //需要修改
    @RequestMapping("/ajaxAddItem")
    @ResponseBody
    public String ajaxAddItem(String menuId, HttpSession httpSession, HttpServletResponse resp) throws JsonProcessingException {

        int id = Integer.parseInt(menuId);
        // 调用bookService.queryBookById(id):Book得到图书的信息
        menu menu = menuService.queryMenuById(id);
        System.out.println(id);
        // 把图书信息，转换成为CartItem商品项
        CartItem cartItem = new CartItem(menu.getId(),menu.getName(),1,menu.getPrice(),menu.getPrice());
        // 调用Cart.addItem(CartItem);添加商品项
        Cart cart = (Cart) httpSession.getAttribute("cart");
        if (cart == null) {
            cart = new Cart();
            httpSession.setAttribute("cart",cart);
        }
        cart.addItem(cartItem);

        System.out.println(cart);
        // 最后一个添加的商品名称
        httpSession.setAttribute("lastName", cartItem.getName());

        //6、返回购物车总的商品数量和最后一个添加的商品名称
        Map<String,Object> resultMap = new HashMap<String,Object>();

        resultMap.put("totalCount", cart.getTotalCount());
        resultMap.put("lastName",cartItem.getName());
//创建一个jackson的对象映射器，用来解析数据


        ObjectMapper mapper = new ObjectMapper();
        //创建一个对象

        //将我们的对象解析成为json格式
        String out = mapper.writeValueAsString(resultMap);
        //由于@ResponseBody注解，这里会将str转成json格式返回；十分方便
        return out;



    }


    //修改商品数量
    @RequestMapping("/updateCount/{id}/{count}")
    public String updateCount(@PathVariable int id,@PathVariable int count,HttpSession httpSession,@RequestHeader(value = "referer", required = false) final String referer) {
        // 获取Cart购物车对象
        Cart cart = (Cart) httpSession.getAttribute("cart");
            // 修改商品数量
            cart.updateCount(id, count);
            // 重定向回原来购物车展示页面
            return "redirect:" + referer;
    }

    @RequestMapping("/clear")
    public String clear(HttpSession httpSession,@RequestHeader(value = "referer", required = false) final String referer) {
        // 1 获取购物车对象
        Cart cart = (Cart) httpSession.getAttribute("cart");

            // 清空购物车
            cart.clear();
            // 重定向回原来购物车展示页面
        return "redirect:" + referer;
    }

    @RequestMapping("/deleteItem/{id}")
    public String deleteItem(HttpSession httpSession,@PathVariable int id,@RequestHeader(value = "referer", required = false) final String referer) {

        // 获取购物车对象
        Cart cart = (Cart) httpSession.getAttribute("cart");

            // 删除 了购物车商品项
            cart.deleteItem(id);
            // 重定向回原来购物车展示页面
        return "redirect:" + referer;

    }

//    @RequestMapping("/addItem/{id}")
//    public String addItem(HttpSession httpSession,@PathVariable int id,@RequestHeader(value = "referer", required = false) final String referer) {
//        menu menu1 = menuService.queryMenuById(id);
//        // 把图书信息，转换成为CartItem商品项
//        CartItem cartItem = new CartItem(menu1.getId(),menu1.getName(),1,menu1.getPrice(),menu1.getPrice());
//        // 调用Cart.addItem(CartItem);添加商品项
//        Cart cart = (Cart) httpSession.getAttribute("cart");
//        if (cart == null) {
//            cart = new Cart();
//
//            httpSession.setAttribute("cart",cart);
//        }
//        cart.addItem(cartItem);
//
//        System.out.println(cart);
//        System.out.println("请求头Referer的值：" + referer);
//        // 最后一个添加的商品名称
//        httpSession.setAttribute("lastName", cartItem.getName());
//
//        // 重定向回原来商品所在的地址页面
//        return "redirect:" + referer;
//    }
}
